home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Enigma Amiga CD
/
Listati
/
63-Marzo-Listato1.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-09-02
|
1KB
|
49 lines
/*******************************************************************************
* Listato 1 - Funzione CloseWindowSafely, riportata sul ROM Kernel Manual, per *
* la chiusura di finestre con porta condivisa; nella versione su *
* RKM c'era un bug nella funzione StripIntuiMessage che ho corret- *
* to; non si controllava se il primo messaggio della lista, quello *
* prelevato in testa, esistesse effettivamente ossia fosse diverso *
* da NULL; se la lista era vuota infatti venivano rimossi messaggi *
* inesistenti e l'Amiga si bloccava *
******************************************************************************/
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/lists.h>
#include <exec/ports.h>
#include <intuition/intuition.h>
void StripIntuiMessage(struct MsgPort *mp, struct Window *win)
{
struct IntuiMessage *msg;
struct Node *succ;
msg = (struct IntuiMessage *)mp->mp_MsgList.lh_Head;
if (msg != NULL)
{
while (succ = msg->ExecMessage.mn_Node.ln_Succ)
{
if (msg->IDCMPWindow == win)
{
Remove(msg);
ReplyMsg(msg);
}
msg = (struct IntuiMessage *)succ;
}
}
return;
}
void CloseWindowSafely(struct Window *win)
{
Forbid();
StripIntuiMessage(win->UserPort,win);
win->UserPort = NULL;
ModifyIDCMP(win,NULL);
Permit();
CloseWindow(win);
return;
}